package visiopuce.service;

import visiopuce.ApplicationContexte;
import visiopuce.HibernateUtil;
import visiopuce.DAO.EnModifDAO;
import visiopuce.DAO.EnModifDAOImpl;
import visiopuce.objets.EnModif;
import visiopuce.objets.Personne;
import visiopuce.objets.Utilisateur;

public class EnModifServiceImpl implements EnModifService {

	private EnModifDAO enModifDAO = EnModifDAOImpl.getInstance();

	/** Constructeur priv� */
	private EnModifServiceImpl() {
	}

	/** Instance unique non pr�initialis�e */
	private static EnModifServiceImpl INSTANCE = null;

	/** Point d'acc�s pour l'instance unique du singleton */
	public static EnModifService getInstance() {
		if (INSTANCE == null) {
			INSTANCE = new EnModifServiceImpl();
		}
		return INSTANCE;
	}

	public Utilisateur isEnModif(Integer idPersonne) {
		Utilisateur utilisateur = null;
		if (idPersonne != 0) {
			HibernateUtil.beginTransaction();
			utilisateur = enModifDAO.isEnModif(idPersonne);
			HibernateUtil.commitTransaction();
			HibernateUtil.closeSession();
		}
		return utilisateur;
	}

	public void passerEnModif(Personne personne) {
		try {
			EnModif em = new EnModif();
			em.setPersonne(personne);
			em.setUtilisateur(ApplicationContexte.getInstance().getUtilisateur());
			HibernateUtil.beginTransaction();
			enModifDAO.save(em);
			HibernateUtil.commitTransaction();
		} catch (Exception ex) {
			ex.printStackTrace();
			HibernateUtil.rollbackTransaction();
		} finally {
			HibernateUtil.closeSession();
		}
	}

	public void supprimerEnModif(Personne personneCourante) {
		try {
			if (personneCourante.getIdPersonne() != 0) {
				HibernateUtil.beginTransaction();
				enModifDAO.deleteByPersonne(personneCourante, ApplicationContexte.getInstance().getUtilisateur());
				HibernateUtil.commitTransaction();
			}

		} catch (Exception ex) {
			ex.printStackTrace();
			HibernateUtil.rollbackTransaction();
		} finally {
			HibernateUtil.closeSession();
		}
	}

	public void supprimerEnModifUtilisateur(Utilisateur utilisateurCourant) {
		try {
			HibernateUtil.beginTransaction();
			enModifDAO.deleteAllByUtlisateur(utilisateurCourant);
			HibernateUtil.commitTransaction();
		} catch (Exception ex) {
			ex.printStackTrace();
			HibernateUtil.rollbackTransaction();
		} finally {
			HibernateUtil.closeSession();
		}

	}
}
